/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.sael.vista;

import co.edu.senaclem.aspera.vista.*;
import co.edu.senaclem.logica.FichaLogicaLocal;
import co.edu.senaclem.logica.SeguimientoLogicaLocal;
import co.edu.senaclem.logica.UsuariosLogicaLocal;
import co.edu.senaclem.modelo.FichaTitulacion;
import co.edu.senaclem.modelo.Seguimiento;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author DILOVE
 */
@ManagedBean(name = "seguimientosVista")
@RequestScoped
public class SeguimientoVista {

    @EJB
    private SeguimientoLogicaLocal seguimientoLogica;

    @EJB
    private FichaLogicaLocal fichaLogica;

    @EJB
    private UsuariosLogicaLocal usuariosLogica;

    private InputText txtCodigo;
    private Calendar txtFecha;
    private Calendar txtHora;
    private InputText txtCiudad;
    private InputText txtLugar;
    private InputText txtFicha;
    private InputText txtJornada;
    private InputTextarea txtPrograma;
    private SelectOneMenu cmbEstadoSeguimiento;
    private CommandButton btnRegistrar;
    private CommandButton btnModificar;
    private CommandButton btnEliminar;
    private CommandButton btnLimpiar;
    private Seguimiento selectedSeguimiento;
    private String codigoSeguimiento;
    private List<Seguimiento> listaSeguimientos = null;

    public void onEliminacionConfirm(ActionEvent actionEvent) {
        borrar_action();
    }

    /**
     * @return the btnRegistrar
     */
    public CommandButton getBtnRegistrar() {
        return btnRegistrar;
    }

    /**
     * @param btnRegistrar the btnRegistrar to set
     */
    public void setBtnRegistrar(CommandButton btnRegistrar) {
        this.btnRegistrar = btnRegistrar;
    }

    /**
     * @return the btnModificar
     */
    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    /**
     * @param btnModificar the btnModificar to set
     */
    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    /**
     * @return the btnEliminar
     */
    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    /**
     * @param btnEliminar the btnEliminar to set
     */
    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    /**
     * @return the btnLimpiar
     */
    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    /**
     * @param btnLimpiar the btnLimpiar to set
     */
    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public void registrar_action() {
        System.out.println("Registrar Seguimiento");
        if (usuariosLogica.validarSesion()) {
            try {
                Seguimiento seguimiento = new Seguimiento();
                Integer ficha = Integer.parseInt(txtFicha.getValue().toString());
                FichaTitulacion fichaS = fichaLogica.consultarPorId(ficha);
                seguimiento.setFichaTitulacion(fichaS);
                String na = seguimientoLogica.generarNumeroSeguimiento(ficha);                
                seguimiento.setNumeroactaseguimiento(Integer.parseInt(na));
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                String fecha = format.format(txtFecha.getValue());
                seguimiento.setFechaseguimiento(fecha);
                SimpleDateFormat formath = new SimpleDateFormat("HH:mm");
                String hora = formath.format(txtHora.getValue());
                seguimiento.setHoraseguimiento(hora);
                seguimiento.setEstadoseguimiento("PROGRAMADO");
                seguimiento.setLugarseguimiento(txtLugar.getValue().toString());
                seguimiento.setCiudadseguimiento(txtCiudad.getValue().toString());
                seguimientoLogica.registrar(seguimiento);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Seguimiento se Registró con Exito!"));
            } catch (NumberFormatException nfe) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error ", "La Ficha es Obligatoria y los datos del Seguimiento"));
            }catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
                //System.out.println("excepcion " + e.getMessage());
            } 
            setListaSeguimientos(null);
            limpiar_action();
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(SeguimientoVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void borrar_action() {
        System.out.println("Va a cancelar seguimiento"+txtCodigo.getValue().toString());
        if (usuariosLogica.validarSesion()) {
            try {
                try {
                    Integer cs = Integer.parseInt(txtCodigo.getValue().toString());
                    Seguimiento s = seguimientoLogica.consultarPorNumero(cs);
                    seguimientoLogica.eliminar(s);

                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Seguimiento se Eliminó con Exito"));
                } catch (Exception e) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
                }                
            } catch (Exception ex) {
                Logger.getLogger(SeguimientoVista.class.getName()).log(Level.SEVERE, null, ex);
            }
            listaSeguimientos = null;
                limpiar_action();
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void limpiar_action() {
        try {
            System.out.println("Limpiar");
            txtFecha.setValue(null);
            codigoSeguimiento = seguimientoLogica.generarCodigoSeguimiento();
            txtCodigo.setValue(codigoSeguimiento);
            txtFicha.setValue("");
            txtJornada.setValue("");
            txtPrograma.setValue("");
            txtHora.setValue(null);
            cmbEstadoSeguimiento.setValue("PROGRAMADO");
            txtCiudad.setValue("");
            txtLugar.setValue("");
            btnRegistrar.setDisabled(false);
            btnModificar.setDisabled(true);
            btnEliminar.setDisabled(true);
        } catch (Exception ex) {
            Logger.getLogger(SeguimientoVista.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void onRowSelect(SelectEvent event) {
        System.out.println("Selecciono un Seguimiento para Eliminar");
        if (usuariosLogica.validarSesion()) {
            try {
                Seguimiento seguimiento = (Seguimiento) event.getObject();
                SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
                Date fechaSegui = formato.parse(seguimiento.getFechaseguimiento());
                txtFecha.setValue(fechaSegui);
                txtCodigo.setValue(seguimiento.getCodigoseguimiento());
                codigoSeguimiento = seguimiento.getCodigoseguimiento()+"";
                SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
                System.out.println("Datos " + seguimiento.getHoraseguimiento());
                Date hora = dateFormat.parse(seguimiento.getHoraseguimiento());
                txtHora.setValue(hora);
                txtLugar.setValue(seguimiento.getLugarseguimiento());
                txtFicha.setValue(seguimiento.getFichaTitulacion().getFicha());
                txtJornada.setValue(seguimiento.getFichaTitulacion().getJornada());
                txtPrograma.setValue(seguimiento.getFichaTitulacion().getCodigoPrograma().getNombre());
                cmbEstadoSeguimiento.setValue(seguimiento.getEstadoseguimiento());
                btnRegistrar.setDisabled(true);
                btnModificar.setDisabled(false);
                btnEliminar.setDisabled(false);
            } catch (ParseException ex) {
                Logger.getLogger(SeguimientoVista.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void modificar_action() {
        System.out.println("Modificar Seguimiento");
        if (usuariosLogica.validarSesion()) {
            try {
                Integer codigoS =Integer.parseInt(codigoSeguimiento);
                //Modificar
                Seguimiento seguimiento = new Seguimiento();
                seguimiento.setCodigoseguimiento(codigoS);
                seguimiento.setEstadoseguimiento("PROGRAMADO");
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                String fecha = format.format(txtFecha.getValue());
                seguimiento.setFechaseguimiento(fecha);
                SimpleDateFormat formath = new SimpleDateFormat("HH:mm");
                String hora = formath.format(txtHora.getValue());
                seguimiento.setHoraseguimiento(hora);
                seguimiento.setLugarseguimiento(txtLugar.getValue().toString());
                seguimiento.setCiudadseguimiento(txtCiudad.getValue().toString());
                Integer fichat = Integer.parseInt(txtFicha.getValue().toString());
                seguimiento.setFichaTitulacion(fichaLogica.consultarPorId(fichat));
                seguimientoLogica.modificar(seguimiento);
                FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage("El Seguimiento se modifico con exito"));
            } catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(e.getMessage()));
            }
            listaSeguimientos = null;
            limpiar_action();
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(SeguimientoVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * @return the txtHora
     */
    public Calendar getTxtHora() {
        return txtHora;
    }

    /**
     * @param txtHora the txtHora to set
     */
    public void setTxtHora(Calendar txtHora) {
        this.txtHora = txtHora;
    }

    /**
     * @return the txtLugar
     */
    public InputText getTxtLugar() {
        return txtLugar;
    }

    /**
     * @param txtLugar the txtLugar to set
     */
    public void setTxtLugar(InputText txtLugar) {
        this.txtLugar = txtLugar;
    }

    /**
     * @return the cmbEstadoSeguimiento
     */
    public SelectOneMenu getCmbEstadoSeguimiento() {
        return cmbEstadoSeguimiento;
    }

    /**
     * @param cmbEstadoSeguimiento the cmbEstadoSeguimiento to set
     */
    public void setCmbEstadoSeguimiento(SelectOneMenu cmbEstadoSeguimiento) {
        this.cmbEstadoSeguimiento = cmbEstadoSeguimiento;
    }

    /**
     * @return the selectedSeguimiento
     */
    public Seguimiento getSelectedSeguimiento() {
        return selectedSeguimiento;
    }

    /**
     * @param selectedSeguimiento the selectedSeguimiento to set
     */
    public void setSelectedSeguimiento(Seguimiento selectedSeguimiento) {
        this.selectedSeguimiento = selectedSeguimiento;
    }

    /**
     * @return the listaSeguimientos
     */
    public List<Seguimiento> getListaSeguimientos() {
        System.out.println("Actualiza tabla??");
        if (listaSeguimientos == null) {
            try {
                setListaSeguimientos(seguimientoLogica.consultar());
                System.out.println("lista seguimiento nueva "+listaSeguimientos.size());
            } catch (Exception ex) {
                Logger.getLogger(SeguimientoVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }else{
            System.out.println("Lista vacia");
        }
        return listaSeguimientos;
    }

    /**
     * @param listaSeguimientos the listaSeguimientos to set
     */
    public void setListaSeguimientos(List<Seguimiento> listaSeguimientos) {
        this.listaSeguimientos = listaSeguimientos;
    }

    /**
     * @return the txtFicha
     */
    public InputText getTxtFicha() {
        return txtFicha;
    }

    /**
     * @param txtFicha the txtFicha to set
     */
    public void setTxtFicha(InputText txtFicha) {
        this.txtFicha = txtFicha;
    }

    /**
     * @return the txtCodigo
     */
    public InputText getTxtCodigo() {
        return txtCodigo;
    }

    /**
     * @param txtCodigo the txtCodigo to set
     */
    public void setTxtCodigo(InputText txtCodigo) {
        this.txtCodigo = txtCodigo;
    }

    /**
     * @return the codigoSeguimiento
     */
    public String getCodigoSeguimiento() {
        try {
            setCodigoSeguimiento(seguimientoLogica.generarCodigoSeguimiento());
        } catch (Exception ex) {
            Logger.getLogger(SeguimientoVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        return codigoSeguimiento;
    }

    /**
     * @param codigoSeguimiento the codigoSeguimiento to set
     */
    public void setCodigoSeguimiento(String codigoSeguimiento) {
        this.codigoSeguimiento = codigoSeguimiento;
    }

    /**
     * @return the txtJornada
     */
    public InputText getTxtJornada() {
        return txtJornada;
    }

    /**
     * @param txtJornada the txtJornada to set
     */
    public void setTxtJornada(InputText txtJornada) {
        this.txtJornada = txtJornada;
    }

    /**
     * @return the txtPrograma
     */
    public InputTextarea getTxtPrograma() {
        return txtPrograma;
    }

    /**
     * @param txtPrograma the txtPrograma to set
     */
    public void setTxtPrograma(InputTextarea txtPrograma) {
        this.txtPrograma = txtPrograma;
    }

    public void txtFicha_listener() {
        System.out.println("Entro al listener de la Ficha de Seguimientoo");
        if (usuariosLogica.validarSesion()) {
            try {
                FichaTitulacion ft = null;
                Integer numeroFicha = Integer.parseInt(getTxtFicha().getValue().toString());
                ft = fichaLogica.consultarPorId(numeroFicha);
                if (ft == null) {
                    txtJornada.setValue("");
                    txtPrograma.setValue("");
                    txtFicha.setValue("");
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Aviso: ", "La Ficha No Está Registrada!"));
                } else {
                    getTxtFicha().setValue(ft.getFicha());
                    txtJornada.setValue(ft.getJornada());
                    txtPrograma.setValue(ft.getCodigoPrograma().getNombre());
                }
            } catch (Exception ex) {
                Logger.getLogger(AprendizVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    /**
     * @return the txtFecha
     */
    public Calendar getTxtFecha() {
        return txtFecha;
    }

    /**
     * @param txtFecha the txtFecha to set
     */
    public void setTxtFecha(Calendar txtFecha) {
        this.txtFecha = txtFecha;
    }

    /**
     * @return the txtCiudad
     */
    public InputText getTxtCiudad() {
        return txtCiudad;
    }

    /**
     * @param txtCiudad the txtCiudad to set
     */
    public void setTxtCiudad(InputText txtCiudad) {
        this.txtCiudad = txtCiudad;
    }
}
